^
(?:(?<protocol>[^:/?#]+):)?
(?://(?:
	(?:
		(?<user>[^:@/?#]*)
		(?::(?<password>[^:@/?#]*))?
	)?@)?
	(?<host>[^:/?#]*)
	(?::(?<port>\d*))?
)?
(?<path>(?:[^?#/]*/)*[^?#]*)
(?:\?(?<query>[^#]*))?
(?:\#(?<fragment>.*))?
